#include <iostream>
#include <jsoncpp/json/json.h>
#include <sstream>
#include<memory>

using namespace std;



//封装Jsoncpp的序列化函数
//反序列化的英文是deserialization


void Serialize(Json::Value &root,const string &str)
{

    stringstream ss;
    // Json化字符串类(Json::StreamWriter)需要使用StreamWriterBuilder类来初始化
    Json::StreamWriterBuilder builder;
    Json::StreamWriter *writer = builder.newStreamWriter();
    // 将Json::Value对象转换为JSON字符串并输出到cout
    // 也就是序列化的过程
    writer->write(root, &ss);
    str = ss.str();
    delete writer; // 释放内存内部是new出来的对象
}

bool Deserialize(const string &str, Json::Value &root)
{
    Json::CharReaderBuilder builder;
    unique_ptr<Json::CharReader> reader(builder.newCharReader());
    string errs;
    bool sucess=reader->parse(str.c_str(),str.c_str()+str.length(),&root,&errs);
    if (!sucess)
    {
        cout<<"Jsoncpp parse error:"<<errs<<endl;
        return false;
    }
    return true;    
}